home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / ada / nextdate.ada < prev    next >
Text File  |  1988-03-25  |  2KB  |  52 lines

  1. with TEXT_IO; use TEXT_IO;
  2. procedure NEXTDATE is
  3.    type MONTH_TYPE is
  4.       (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC);
  5.    subtype DAY_SUBTYPE is INTEGER range 1 .. 31;
  6.    type DATE is
  7.       record
  8.          DAY   : DAY_SUBTYPE;
  9.          MONTH : MONTH_TYPE;
  10.          YEAR  : POSITIVE;
  11.       end record;
  12.    PASSED : BOOLEAN := TRUE;
  13.    function TOMORROW(TODAY : in DATE) return DATE is separate;
  14.  
  15.    procedure DISPLAY (S : in STRING; D : in DATE) is
  16.       package INT_IO is new INTEGER_IO(INTEGER); use INT_IO;
  17.       package MON_IO is new ENUMERATION_IO(MONTH_TYPE); use MON_IO;
  18.    begin
  19.       PUT(S);
  20.       PUT(D.DAY, WIDTH => 3);  PUT(" ");
  21.       PUT(D.MONTH);
  22.       PUT(D.YEAR, WIDTH => 5);  NEW_LINE;
  23.    end DISPLAY;
  24.    procedure COMPARE(TODAY, RIGHT_ANSWER : in DATE) is
  25.       MY_ANSWER : DATE := TOMORROW(TODAY);
  26.    begin
  27.       if MY_ANSWER /= RIGHT_ANSWER then
  28.          DISPLAY("Today:       ", TODAY);
  29.          DISPLAY("My answer:   ", MY_ANSWER);
  30.          display("Right answer:", RIGHT_ANSWER);
  31.          NEW_LINE;
  32.          PASSED := FALSE;
  33.       end if;
  34.    end COMPARE;
  35. begin
  36.    COMPARE((12,DEC,1815), (13,DEC,1815)); -- ordinary date
  37.    COMPARE(( 3,FEB,1986), ( 4,FEB,1986)); -- ordinary date in Feb.
  38.    COMPARE((30,JUN,1981), ( 1,JUL,1981)); -- last day of 30-day month
  39.    COMPARE((30,SEP,3999), ( 1,OCT,3999)); -- last day of 30-day month
  40.    COMPARE((31,MAR,1876), ( 1,APR,1876)); -- last day of 31-day month
  41.    COMPARE((31,AUG,1984), ( 1,SEP,1984)); -- last day of 31-day month
  42.    COMPARE((31,DEC,1966), ( 1,JAN,1967)); -- last day of year
  43.    COMPARE((28,FEB,1980), (29,FEB,1980)); -- leap year
  44.    COMPARE((28,FEB,1600), (29,FEB,1600)); -- century leap year
  45.    COMPARE((28,FEB,2100), ( 1,MAR,2100)); -- century non-leap year
  46.    COMPARE((28,FEB,1982), ( 1,MAR,1982)); -- non-leap year
  47.    COMPARE((29,FEB,1980), ( 1,MAR,1980)); -- leap day in leap year
  48.    if PASSED then
  49.       PUT_LINE("Congratulations, you completed the assignment!");
  50.    end if;
  51. end NEXTDATE;
  52.